gdkwindow-x11: Multiply opaque region rects by the window scale
authorJasper St. Pierre <jstpierre@mecheye.net>
Wed, 4 Sep 2013 18:45:01 +0000 (14:45 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Wed, 4 Sep 2013 18:45:54 +0000 (14:45 -0400)
This fixes rendering issues under HiDPI

gdk/x11/gdkwindow-x11.c

index e5b3ffecca5c429ca1d3865019496c6c2a7e5a29..b11909f8c0b273c6b70bce82da4637d38983a0e5 100644 (file)
@@ -5559,11 +5559,14 @@ static void
 gdk_x11_window_set_opaque_region (GdkWindow      *window,
                                   cairo_region_t *region)
 {
+  GdkWindowImplX11 *impl = GDK_WINDOW_IMPL_X11 (window->impl);
   GdkDisplay *display;
-
   int nitems;
   gulong *data;
 
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
   if (region != NULL)
     {
       int i, nrects;
@@ -5576,10 +5579,10 @@ gdk_x11_window_set_opaque_region (GdkWindow      *window,
         {
           cairo_rectangle_int_t rect;
           cairo_region_get_rectangle (region, i, &rect);
-          data[i*4+0] = rect.x;
-          data[i*4+1] = rect.y;
-          data[i*4+2] = rect.width;
-          data[i*4+3] = rect.height;
+          data[i*4+0] = rect.x * impl->window_scale;
+          data[i*4+1] = rect.y * impl->window_scale;
+          data[i*4+2] = rect.width * impl->window_scale;
+          data[i*4+3] = rect.height * impl->window_scale;
         }
     }
   else